package uds_tb

import (
	"server/apps/uds/uds_fld"
	"server/global"
	"server/model/common/request"
)

type UdsTbService struct {
}


func (udsTbService *UdsTbService) CreateUdsTb(udsTb *UdsTb) (err error) {
	err = global.SysDB.Create(udsTb).Error
	return err
}


func (udsTbService *UdsTbService) DeleteUdsTb(udsTb UdsTb) (err error) {
	err = global.SysDB.Delete(&udsTb).Error
	return err
}


func (udsTbService *UdsTbService) DeleteUdsFldByNotIn(udsTb *UdsTb) (err error) {
	var idList []uint
	for _, v := range udsTb.UdsFlds {
		idList = append(idList, v.ID)
	}
	err = global.SysDB.Delete(&[]uds_fld.UdsFld{}, "udsTbId = ? and id not in ?", udsTb.ID, idList).Error
	if err != nil {
		return err
	}
	return nil
}


func (udsTbService *UdsTbService) DeleteUdsTbByIds(ids request.IdsReq) (err error) {
	err = global.SysDB.Delete(&[]UdsTb{}, "id in ?", ids.Ids).Error
	return err
}


func (udsTbService *UdsTbService) UpdateUdsTb(udsTb *UdsTb) (err error) {
	err = global.SysDB.Save(&udsTb).Error
	return err
}


func (udsTbService *UdsTbService) GetUdsTbById(id uint) (udsTb UdsTb, err error) {
	err = global.SysDB.Where("id = ?", id).First(&udsTb).Error
	return
}


func (udsTbService *UdsTbService) GetUdsTbInfoList(info UdsTbSearch) (list []UdsTb, total int64, err error) {
	limit := info.PageSize
	offset := info.PageSize * (info.Page - 1)
	db := global.SysDB.Model(&UdsTb{})
	var udsTbs []UdsTb
	if info.StartCreatedAt != nil && info.EndCreatedAt != nil {
		db = db.Where("created_at BETWEEN ? AND ?", info.StartCreatedAt, info.EndCreatedAt)
	}
	err = db.Count(&total).Error
	if err != nil {
		return
	}

	err = db.Limit(limit).Offset(offset).Find(&udsTbs).Error
	return udsTbs, total, err
}


func (udsTbService *UdsTbService) GetAllUdsTbs() (udsTb []UdsTb, err error) {
	err = global.SysDB.Find(&udsTb).Error
	return udsTb, err
}


func (udsTbService *UdsTbService) GetUdsTb() (udsTb []UdsTb, err error) {
	err = global.SysDB.Find(&udsTb).Error
	return udsTb, err
}
